GRAPHS

The Red List

association graph

Photo by Geran De Klerk on Unsplash

Photo by Geran De Klerk on Unsplash


Ingest

taxonomy

df_taxonomy <- read.csv("archetypes/the-red-list/taxonomy.csv", header = TRUE, stringsAsFactors = FALSE)
df_taxonomy
df_assessments <- read.csv("archetypes/the-red-list/assessments.csv", header = TRUE, stringsAsFactors = FALSE)
df_assessments

Ingest

assessments

df_assessments <- read.csv("archetypes/the-red-list/assessments.csv", header = TRUE, stringsAsFactors = FALSE)
df_assessments

Wrangle

enrich taxonomy with assessments

df_assessments <- df_assessments %>% select(internalTaxonId, yearPublished, rationale, habitat, threats, population, range, useTrade)

df_extinct <- merge(df_taxonomy, df_assessments, by = "internalTaxonId")
df_extinct

Wrangle

create edges from column taxonomy

df_scientific_family <- df_extinct %>% select(scientificName, familyName)
names(df_scientific_family) <- c("from", "to")

df_family_order <- df_extinct %>% select(familyName, orderName)
names(df_family_order) <- c("from", "to")

df_order_class <- df_extinct %>% select(orderName, className)
names(df_order_class) <- c("from", "to")

df_class_phylum <- df_extinct %>% select(className, phylumName)
names(df_class_phylum) <- c("from", "to")

df_phylum_kingdom <- df_extinct %>% select(phylumName, kingdomName)
names(df_phylum_kingdom) <- c("from", "to")

df_edges <- rbind(df_scientific_family, df_family_order, df_order_class, df_class_phylum, df_phylum_kingdom)

Wrangle

create graph structure

# Convert data to graph data frame
# directed FALSE means no flow. It's just an association
df_graph <- graph_from_data_frame( df_edges ) # , vertices=df_nodes

View

calculate layout positions

# Layouts can be computationally intensive
# Un-comment only for use

# igraph
# layout <- create_layout(df_graph, layout = 'dh')
# layout <- create_layout(df_graph, layout = 'fr')
# layout <- create_layout(df_graph, layout = 'gem')
# layout <- create_layout(df_graph, layout = 'lgl')
layout <- create_layout(df_graph, layout = 'sugiyama')
# layout <- create_layout(df_graph, layout = 'star')
# layout <- create_layout(df_graph, layout = 'kk', maxiter = 100)
# layout <- create_layout(df_graph, layout = 'drl')
# layout <- create_layout(df_graph, layout = 'linear')
# layout <- create_layout(df_graph, layout = 'linear' , circular = TRUE)

# ggraph
# layout <- create_layout(df_graph, layout = 'linear')
# layout <- create_layout(df_graph, layout = 'linear', circular = TRUE)
# layout <- create_layout(df_graph, layout = 'stress')
# layout <- create_layout(df_graph, layout = 'sparse_stress')
# layout <- create_layout(df_graph, layout = 'backbone')
# layout <- create_layout(df_graph, layout = 'pmds')
# layout <- create_layout(df_graph, layout = 'eigen')
# layout <- create_layout(df_graph, layout = 'centrality')
# layout <- create_layout(df_graph, layout = 'focus')
# layout <- create_layout(df_graph, layout = 'dendrogram')
# layout <- create_layout(df_graph, layout = 'unrooted')
# layout <- create_layout(df_graph, layout = 'matrix')
# layout <- create_layout(df_graph, layout = 'hive')
# layout <- create_layout(df_graph, layout = 'fabric')

# graphlayouts
# layout <- create_layout(df_graph, layout = "nicely")
# layout <- create_layout(df_graph, layout = "stress")
# layout <- create_layout(df_graph, layout = "focus", focus = 1)

View

Subsection

theme_opts <- theme(
    text = element_text(family = "inconsolata"), 
    # plot.margin = unit(c(1.5,1,1,1), "in"),
    legend.position='none'
)

v1 <- ggraph(layout) + 
  geom_edge_link() +
  geom_node_point() +
  coord_polar() +
  theme_graph()+
  theme_opts

girafe(ggobj = v1, width_svg = 16, height_svg = 16,
       options = list(opts_sizing(rescale = TRUE, width = 1.0)))

References

citations for narrative and data sources